#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
权限系统依赖关系分析脚本
分析数据库权限与静态配置权限的真实关系
"""

import sys
sys.path.append('e:/DEV_VISION')
from app import create_app

def analyze_permission_dependencies():
    """分析权限系统的依赖关系"""
    app = create_app()
    with app.app_context():
        from backend.models.permission import Permission
        from backend.config.constants_v2 import PERMISSION_FEATURE_MAP
        from backend.services.permission_admin_service import get_permission_list
        
        print("=== 权限系统依赖关系分析 ===\n")
        
        # 1. 数据库权限分析
        db_permissions = {p.code: p for p in Permission.query.all()}
        print(f"1. 数据库权限总数: {len(db_permissions)}")
        
        # 2. 静态配置权限分析
        config_permissions = set()
        for module_key, module in PERMISSION_FEATURE_MAP.items():
            for feature_key, feature in module['features'].items():
                permission_code = feature['permission_code']
                config_permissions.add(permission_code)
        
        print(f"2. 静态配置权限总数: {len(config_permissions)}")
        
        # 3. 权限管理界面分析
        ui_permissions = get_permission_list()
        print(f"3. 权限管理界面显示权限总数: {len(ui_permissions)}")
        
        # 4. 分析权限管理界面的构成逻辑
        db_found_in_ui = 0
        config_only_in_ui = 0
        
        for perm in ui_permissions:
            if perm.get('id'):  # 来自数据库
                db_found_in_ui += 1
            else:  # 仅来自配置
                config_only_in_ui += 1
        
        print(f"   - 来自数据库的权限: {db_found_in_ui}")
        print(f"   - 仅来自配置的权限: {config_only_in_ui}")
        
        # 5. 找出权限管理界面遗漏的数据库权限
        config_permission_codes = config_permissions
        ui_permission_codes = {p['code'] for p in ui_permissions}
        db_permission_codes = set(db_permissions.keys())
        
        # 数据库权限但不在配置中的权限（权限管理界面看不到）
        missing_from_ui = db_permission_codes - config_permission_codes
        
        print(f"\n4. 权限管理界面看不到的数据库权限: {len(missing_from_ui)}")
        for perm in sorted(missing_from_ui):
            print(f"   - {perm}")
        
        # 6. 分析实际权限验证使用的权限
        print(f"\n5. 实际权限验证使用的是数据库权限: {len(db_permissions)}个")
        print("   - require_permissions装饰器直接查询数据库Permission表")
        print("   - 静态配置不参与权限验证，只用于管理界面")
        
        # 7. 问题总结
        print(f"\n=== 问题总结 ===")
        print(f"1. 数据库有{len(db_permissions)}个权限，都在正常使用")
        print(f"2. 静态配置只有{len(config_permissions)}个权限定义")
        print(f"3. 权限管理界面只能看到{len(config_permissions)}个权限")
        print(f"4. 有{len(missing_from_ui)}个数据库权限在管理界面中不可见")
        print(f"5. 这{len(missing_from_ui)}个权限无法通过界面管理，但实际生效")
        
        return {
            'db_permissions': len(db_permissions),
            'config_permissions': len(config_permissions),
            'ui_permissions': len(ui_permissions),
            'missing_from_ui': len(missing_from_ui),
            'missing_list': sorted(missing_from_ui)
        }

if __name__ == '__main__':
    result = analyze_permission_dependencies()
    
    print(f"\n=== 修复建议 ===")
    print(f"需要将{result['missing_from_ui']}个数据库权限补充到constants_v2.py中")
    print("这样权限管理界面就能显示和管理所有{result['db_permissions']}个权限")
